package br.com.sipe.entidade;

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.envers.Audited;
import org.hibernate.validator.constraints.Email;

import br.com.arquitetura.entidade.Entidade;
import br.com.arquitetura.util.StringUtil;

@Entity
@Table(name = "PARTICIPANTE", catalog = "SIPE_V2")
@Audited
public class Participante extends Entidade<Integer> {

	private static final long serialVersionUID = -4934269009612475727L;

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "ID_PARTICIPANTE", unique = true, nullable = false)
	private Integer id;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_EMPRESA", referencedColumnName = "ID_EMPRESA", nullable = false)
	private Empresa empresa;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_SEGMENTO_GRUPO", referencedColumnName = "ID_SEGMENTO_GRUPO", nullable = false)
	private SegmentoGrupo segmentoGrupo;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_USUARIO", referencedColumnName = "ID_USUARIO", nullable = false)
	private Usuario usuario;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_MUNICIPIO", referencedColumnName = "ID_MUNICIPIO", nullable = false)
	private Municipio municipio;

	@Column(name = "NOM_PARTICIPANTE")
	private String nome;

	@Column(name = "LOGRADOURO")
	private String logradouro;

	@Column(name = "BAIRRO")
	private String bairro;

	@Column(name = "NUM_LOGRADOURO")
	private String numero;

	@Column(name = "COMPLEMENTO")
	private String complemento;

	@Column(name = "CEP")
	private String cep;

	@Email(message = "Email inválido")
	@Column(name = "EMAIL")
	private String email;

	@Column(name = "CPF")
	private String cpf;

	@Transient
	private String cpfFormat;

	public Participante() {
	}

	public Participante(Integer id) {
		this.id = id;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Municipio getMunicipio() {
		return municipio;
	}

	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getLogradouro() {
		return logradouro;
	}

	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public String getCpfFormat() {
		if (cpf != null && !cpf.isEmpty()) {
			return StringUtil.format("###.###.###-##", cpf);
		}
		return cpfFormat;
	}

	public void setCpfFormat(String cpfFormat) {
		this.cpfFormat = cpfFormat;
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public SegmentoGrupo getSegmentoGrupo() {
		return segmentoGrupo;
	}

	public void setSegmentoGrupo(SegmentoGrupo segmentoGrupo) {
		this.segmentoGrupo = segmentoGrupo;
	}

}
